查看原文
其他

Android 14 新增权限

程序员DHL ByteCode 2023-12-27

hi 这是 dhl 的第 87 篇文章

个人微信: hi-dhl

Hi 大家好,我是 DHL,大厂全栈程序员,曾就职于 美团、快手、小米。分享技术干货和编程知识点

原文: https://medium.com/proandroiddev/one-more-permission-android14-472ecc999729

译者:程序员 DHL

本文已收录于仓库 https://github.com/hi-dhl/Technical-Article-Translation

这篇文章,主要分享在 Android 14 以上新增的权限 READ_MEDIA_VISUAL_USER_SELECTED该权限允许用户仅授予对选定媒体的访问权限(Photos / Videos)),而不是访问整个媒体库。

新的权限弹窗

当你的 App 运行在 Andrid 14 以上的设备时,如果请求访问照片,会出现以下对话框,你将看到新的选项。

受影响的行为

当我们在项目中声明新的权限 READ_MEDIA_VISUAL_USER_SELECTED ,并且用户选择 Select photos and videos(Select photos or Select videos)

  • READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 权限都会被拒绝

  • READ_MEDIA_VISUAL_USER_SELECTED 权限被授予时,将会被允许临时访问用户的照片和视频

  • 如果我们需要访问其他照片和视频,我们需要同时申请 READ_MEDIA_IMAGES 或者  READ_MEDIA_VIDEO 权限

如何在项目中使用新的权限

  • AndroidManifest.xml 文件中添加下面的权限

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />

// new permisison
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
  • 使用 ActivityResultContract 请求新的权限

val permissionLauncher =
  rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { mapResults ->
      mapResults.forEach {
          Log.d(TAG, "Permission: ${it.key} Status: ${it.value}")
      }
      // check if any of the requested permissions is granted or not
      if (mapResults.values.any { it }) {
          // query the content resolver
          queryContentResolver(context) { listOfImages ->
              imageDataModelList = listOfImages
          }
      }
  }

为什么要使用 RequestMultiplePermissions,因为我们需要同时请求 READ_MEDIA_IMAGES ,  READ_MEDIA_VIDEO 权限

  • 启动权限申请流程

OutlinedButton(onClick = {
  permissionLauncher.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED))
}) {
  Text("Allow to read all or select images")
}


关于 Android 12 、 Android 13 、Android 14 功能和权限的变更,点击下方链接前往查看:


最后我们看一下运行效果


全文到这里就结束了,感谢你的阅读,坚持原创不易,欢迎 在看点赞分享 给身边的小伙伴,我会持续分享原创干货!!!


推荐阅读

90% 的 Java 程序员都会犯的错

被裁现状,给找工作的同学一些建议
微信黑科技

Hi 大家好,我是 DHL,就职于 美团、快手、小米。分享技术干货和编程知识点,包含性能优化、系统源码、算法、数据结构、大厂面经。

  • 哔哩哔哩:https://space.bilibili.com/498153238

  • 掘金:https://juejin.im/user/2594503168898744

  • 博客:https://hi-dhl.com

  • Github:https://github.com/hi-dhl

👇🏻 真诚推荐你关注我👇🏻

因微信公众号更改了推送机制

可能无法及时看到最新文章

 将公众号设为 星标 

或常为文章点 在看

即可及时收到最新文章


欢迎前往 博客 查看更多 Kotlin、Jetpack 、动画算法图解、系统源码分析等等文章。以及开源项目、LeetCode / 剑指 offer / 国内外大厂面试题 / 多线程 题解。

https://www.hi-dhl.com

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存